package com.zmn.oms.business.impl.tmall;

import com.zmn.common.constant.GlobalConsts;
import com.zmn.common.utils.date.DateUtil;
import com.zmn.oms.business.interfaces.log.OrderLogBService;
import com.zmn.oms.business.interfaces.tmall.OrderTmallExtendBService;
import com.zmn.oms.common.annotation.ZsNormalOrderWorkLog;
import com.zmn.oms.common.constant.OrderLogConsts;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dto.tmall.OrderTmallExtendDTO;
import com.zmn.oms.model.entity.tamllextend.OrderTmallExtend;
import com.zmn.oms.model.entity.tamllextend.OrderTmallExtendQuery;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.services.interfaces.detail.OrderDetailService;
import com.zmn.oms.services.interfaces.masterworking.MasterWorkingService;
import com.zmn.oms.services.interfaces.member.OrderMemberService;
import com.zmn.oms.services.interfaces.tmallextend.OrderTmallExtendService;
import com.zmn.oms.services.interfaces.work.OrderWorkService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * 类描述：天猫业务接口
 *
 * @author yule
 * @date 2019/11/25 17:02
 */
@Slf4j
@Primary
@Service
public class OrderTmallExtendBServiceImpl implements OrderTmallExtendBService {
    @Autowired
    OrderWorkService orderWorkService;
    @Autowired
    OrderDetailService orderDetailService;
    @Autowired
    OrderLogBService orderLogBService;
    @Autowired
    OrderMemberService orderMemberService;
    @Autowired
    MasterWorkingService masterWorkingService;
    @Autowired
    private OrderTmallExtendService orderTmallExtendService;

    /**
     * 工程师签到
     *
     * @param orderTmallExtendDTO
     */
    @Override
    @ZsNormalOrderWorkLog(type = OrderLogConsts.ORDER_LOG_TYPE_SIGN_IN)
    public void updateSignIn(OrderTmallExtendDTO orderTmallExtendDTO) throws Exception {
        OrderTmallExtend orderTmallExtendVO = findOrderTmallExtendByOrderId(orderTmallExtendDTO.getOrderId());
        if (orderTmallExtendVO == null) {
            throw new OmsBaseException("不存在签到的工单");
        }
        OrderTmallExtend orderTmallExtend = new OrderTmallExtend();
        orderTmallExtend.setOrderId(orderTmallExtendDTO.getOrderId());
        orderTmallExtend.setSignInStatus(orderTmallExtendDTO.getSignInStatus());
        orderTmallExtend.setUpdater(orderTmallExtendDTO.getOperator());
        orderTmallExtend.setVisitEarlyFlag(orderTmallExtendDTO.getVisitEarlyFlag());
        if (Objects.equals(GlobalConsts.YES, orderTmallExtendDTO.getSignInStatus())) {
            orderTmallExtend.setSignInTime(DateUtil.getNow());
        } else {
            orderTmallExtend.setSignInFailTime(DateUtil.getNow());
            orderTmallExtend.setSignInFailReason(orderTmallExtendDTO.getSignInFailReason());
        }
        orderTmallExtendService.updateByKey(orderTmallExtend);

    }

    /**
     * 核销
     *
     * @param orderTmallExtendDTO
     */
    @Override
    @ZsNormalOrderWorkLog(type = OrderLogConsts.ORDER_LOG_TYPE_VERIFICATION)
    public void updateVerificationStatus(OrderTmallExtendDTO orderTmallExtendDTO) throws Exception {
        OrderWork orderWork = orderWorkService.findOrderWorkByKey(orderTmallExtendDTO.getOrderId(), orderTmallExtendDTO.getWorkId());
        if (orderWork == null) {
            throw new OmsBaseException("无效的工单");
        }
        OrderTmallExtend orderTmallExtend = new OrderTmallExtend();
        orderTmallExtend.setOrderId(orderTmallExtendDTO.getOrderId());
        orderTmallExtend.setVerification(GlobalConsts.YES);
        orderTmallExtend.setVerificationTime(DateUtil.getNow());
        orderTmallExtend.setUpdater(orderTmallExtendDTO.getOperator());
        orderTmallExtendService.updateByKey(orderTmallExtend);
    }

    /**
     * 新增
     *
     * @param orderTmallExtendDTO
     */
    @Override
    public void saveOrderTmallExtendWithOutLog(OrderTmallExtendDTO orderTmallExtendDTO)  {
        OrderTmallExtend orderTmallExtend = new OrderTmallExtend();
        orderTmallExtend.setOrderId(orderTmallExtendDTO.getOrderId());
        orderTmallExtend.setOuterId(orderTmallExtendDTO.getOuterId());
        orderTmallExtend.setChannelId(orderTmallExtendDTO.getChannelId());
        orderTmallExtend.setVipOrder(orderTmallExtendDTO.getVipOrder());
        orderTmallExtend.setBigPromotionOrder(orderTmallExtendDTO.getBigPromotionOrder());
        orderTmallExtend.setServiceCode(orderTmallExtendDTO.getServiceCode());
        orderTmallExtend.setSignInStatus(orderTmallExtendDTO.getSignInStatus());
        orderTmallExtend.setVerification(orderTmallExtendDTO.getVerification());
        orderTmallExtend.setServiceCount(orderTmallExtendDTO.getServiceCount());
        orderTmallExtend.setCreater("系统");
        orderTmallExtendService.insertOrderTmallExtend(orderTmallExtend);
    }

    /**
     * 查询
     *
     * @param orderTmallExtendDTO
     */
    @Override
    public OrderTmallExtend findSignInByTmallQuery(OrderTmallExtendDTO orderTmallExtendDTO) {
        OrderTmallExtendQuery query = new OrderTmallExtendQuery();
        query.setOrderId(orderTmallExtendDTO.getOrderId());
        query.setChannelId(orderTmallExtendDTO.getChannelId());
        query.setSignInStatus(orderTmallExtendDTO.getSignInStatus());
        query.setVerification(orderTmallExtendDTO.getVerification());
        return orderTmallExtendService.findByTmallQuery(query);
    }


    @Override
    public OrderTmallExtend findOrderTmallExtendByOrderId(Long orderId) {
        return orderTmallExtendService.findByKey(orderId);
    }

    @Override
    public List<OrderTmallExtend> listByOrderIdList(List<Long> orderIdList) {
        return orderTmallExtendService.listByOrderIdList(orderIdList);
    }

}